from datetime import timedelta

from django.utils import timezone
from rest_framework.permissions import IsAdminUser
from rest_framework.response import Response
from rest_framework.views import APIView


from goods.models import GoodsVisitCount
from meiduo_admin.serializers.statistical import GoodsVisitSerializer
from users.models import User

# GET /meiduo_admin/statistical/total_count/
class UserTotalCountView(APIView):
    permission_classes = [IsAdminUser]
    # 用户总量统计
    def get(self, request):
        '''
       1.获取网站总用户数
       2.返回应答
        '''
        #1.获取网站总用户数
        now_data=timezone.now()
        # count=User.objects.all().count()
        count=User.objects.count()
        #2.返回应答
        response_data={
            #data只返回年月日
            'data':now_data.date(),
            'count':count
        }
        return Response(response_data)

# GET /meiduo_admin/statistical/day_increment/
class UserDayCountView(APIView):
    permission_classes = [IsAdminUser]
    def get(self,request):
        '''
        获取日增用户数量
        1.获取日增用户数量
        2.返回应答
        '''
        #1.获取日增用户数量  gte大于等于
        now_data=timezone.now().replace(hour=0,minute=0,second=0,microsecond=0)
        count=User.objects.filter(date_joined__gte=now_data).count()
        #2.返回应答
        response_data={
            #data只返回年月日
            'data':now_data.date(),
            'count':count
        }

        return Response(response_data)

# GET /meiduo_admin/statistical/day_active/
class UserActiveView(APIView):
    permission_classes = [IsAdminUser]
    def get(self,request):
        '''
        1.获取日活用户量
        2.返回应答
        '''
        #1.获取当前时间
        now_data=timezone.now().replace(hour=0,minute=0,second=0,microsecond=0)
        count=User.objects.filter(last_login__gte=now_data).count()
        #2.返回
        response_data={
            'data':now_data.date(),
            'count':count
        }
        return Response(response_data)

# GET /meiduo_admin/statistical/day_orders/
class UserOrderView(APIView):
    '''
    获取日下单用户数量
    1.获取日下单用户数量
    2.返回应答
    '''
    def get(self,request):
        #1.获取日下单用户数量
        now_data=timezone.now().replace(hour=0,minute=0,second=0,microsecond=0)
        count=User.objects.filter(orders__create_time__gte=now_data).distinct().count()
        #2.返回数据
        response_data={
            'data':now_data.date(),
            'count':count
        }
        return Response(response_data)

# GET /meiduo_admin/statistical/month_increment/
class UserMonthCountView(APIView):
    permission_classes = [IsAdminUser]
    def get(self,request):
        '''
        获取当月每日新增用户数据
        1.获取当月每日新增用户数据
        2.返回应答
        '''
        #1.获取当前每日新增用户数据
        now_data=timezone.now().replace(hour=0,minute=0,second=0,microsecond=0)
        #起始日期
        begin_data=now_data-timedelta(days=29)

        #统计数据列表
        count_list=[]
        for i in range(30):
            #当天时间和下一天时间
            cur_data=begin_data+timedelta(days=i)
            next_data=cur_data+timedelta(days=1)
            #统计当天新增用户数量
            count=User.objects.filter(date_joined__gte=cur_data,date_joined__lt=next_data).count()
            count_list.append({
                'data':cur_data.date(),
                'count':count
            })
        return Response(count_list)

# GET /meiduo_admin/statistical/goods_day_views/
class GoodDayView(APIView):
    permission_classes = [IsAdminUser]
    def get(self,request):
        '''
        获取当日分类商品访问量
        1.查询获取当日分类商品访问量
        2.将查询数据序列化并返回
        '''
        #1.查询获取当日分类商品访问量
        #当前日期
        now_date=timezone.now().date()
        goods_visit = GoodsVisitCount.objects.filter(date=now_date)
        #2.将查询数据序列化并返回
        serializer=GoodsVisitSerializer(data=goods_visit,many=True)
        serializer.is_valid()
        return Response(serializer.data)
